package com.mxcyk.serviceLogic.autohiddenframe;

import java.awt.Point;

import javax.swing.JFrame;

/**
 * 功能:窗体自动隐藏
 * 
 * @author k 2013年8月2日10:06:11
 * 
 */
public class AutoHiddenFrame {
	JFrame frame = null;
	public static final int NORMAL = 0; // 窗体的普通状态
	public static final int CANHIDD = 1; // 窗体位于屏幕边缘,可以隐藏的状态
	public static final int HIDDEN = 2; // 窗体处于隐藏状态
	private int state = NORMAL; // 窗体的状态,让它初始化为普通状态
	private Point hiddenPoint; // 隐藏窗体时,窗体的位置
	private Point visiblePoint; // 窗体处于显示状态时的位置

	public AutoHiddenFrame(JFrame jf) {
		this.frame = jf;
		jf.setAlwaysOnTop(true);//窗体置顶
		new WindowLocationListener(this);
		new WindowMouseListener(this);
		WindowLocationListener.checkAutoHiddenState(this);// 刚出来就检查一下窗体的位置
	}

	/**
	 * @param newState
	 *            新的状态 一定要是此类中定义的3中状态之一
	 */
	public void setStates(int newState) {
		if (newState == NORMAL || newState == CANHIDD || newState == HIDDEN) {
			state = newState;
		}
	}

	/*
	 * 返回状态,注意此方法和setStates方法区别与JFrame中的setState()和getState()方法
	 */
	public int getStates() {
		return state;
	}

	/*
	 * 设置要显示时窗体的坐标
	 */
	public void setVisiblePoint(Point point) {
		visiblePoint = point;
	}

	/*
	 * 设置要隐藏是窗体的坐标
	 */
	public void setHiddenPoint(Point point) {
		hiddenPoint = point;
	}

	public void moveToVisible() {
		if (visiblePoint != null) {
			WindowMover.moveToPoint(frame, visiblePoint);
			setStates(CANHIDD);
		}
	}

	public void moveToHidden() {
		if (hiddenPoint != null) {
			WindowMover.moveToPoint(frame, hiddenPoint);
			setStates(HIDDEN);
		}
	}

	public static void main(String args[]) {
		JFrame jfr = new JFrame();
		jfr.setSize(300, 200);
		jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jfr.setVisible(true);

		new AutoHiddenFrame(jfr);
	}

}
